Software applications often provide a set of tools and supporting data types that provide a core level of functionality to users. However, it is often desirable to add additional tools and to extend the functionality of a core software application. For example, a software provider may wish to provide further functionality for a software application after it has been released. Additionally, third-party software providers may wish to provide products that add functionality to another software provider's application.
Typically, add-on applications (i.e., modules) may be provided to extend the functionality of a core software application. However, current approaches to software design often dictate that the modules be written in the schema of the core applications that they extend. Data used by the module must be supported by the core application. This presents a number of drawbacks. For instance, a module cannot maintain its own types of data separate from the core application. Additionally, a module typically must be written specifically for a particular core application to operate with that application. As a result, an existing module may not be easily adapted to operate with an application that it was not originally intended to extend.